#pragma once

#include<iostream>
#include<string>
#include"util.hpp"
namespace ns_log
{
    // 引入公共功能
    using namespace ns_util;

    // 日志等级
    enum
    {
        INFO,    // 常规，正常的
        DEBUG,   // 调试
        WARNING, // 告警
        ERROR,   // 错误
        FATAL    // 致命错误
    };

    // 打印日志
    // 参数：日志等级，在哪一个文件，当前在哪一行
    // 使用方法：Log() << "message"
    inline std::ostream &Log(const std::string &level, const std::string &file_name, int line)
    {
        // 添加日志等级
        std::string message = "[";
        message += level;
        message += "]";

        // 添加报错文件名称
        message += "[";
        message += file_name;
        message += "]";

        // 添加报错行
        message += "[";
        message += std::to_string(line);
        message += "]";

        // 添加日志时间戳
        message += "[";
        message += TimeUtil::GetTimeStamp(); // 获取时间戳
        message += "]";

        // cout的本质是一个缓冲区，只有当缓冲区满了或者遇到换行符时才会刷新输出
        std::cout<< message; // 注意这里不要用endl进行刷新，
        return std::cout;
    }
    // 再用宏封装一下
    // 使用方法：例如：LOG(INFO) << "message" << "\n"
#define LOG(level) Log(#level,__FILE__,__LINE__)
}